//============================================================================
// Name        : AlarmStatus.h
// Author      : Casey Kelso
// Copyright   : Kineticsproject.com (c) 2010
// Description : Alarm Status Class
// Created     : September 14th 2010
//============================================================================

#ifndef ALARMSTATUS_H_
#define ALARMSTATUS_H_

#include <string>
#include <stdint.h>

using namespace std;
class AlarmStatus
{
public:
    AlarmStatus();
    AlarmStatus(const AlarmStatus &rhs);
    virtual ~AlarmStatus();
    enum eAlarmState    { STATE_ALARM_READY, STATE_ALARM_AWAY, STATE_ALARM_STAY, STATE_ALARM_UNKNOWN};
    eAlarmState getAlarmState(void);
    bool isACPowerOn(void);
    bool isAlarmTriggered(void);
    bool isAlarmBell(void);
    bool isBatteryLow(void);
    bool isValid(void){return(valid);}
    void setValid(bool valid){this->valid = valid;}
    const string getAlarmStatusMessage(void);
    void setAlarmStatusMessage(std::string statusString);
    AlarmStatus& operator= (const AlarmStatus &rhs);
   

    

private:
    enum eFieldState    { STATE_UNDEFINED, STATE_ON, STATE_OFF };
    const unsigned char SYMBOL_UNDEFINED;
    const unsigned char SYMBOL_ON;
    const unsigned char SYMBOL_OFF;
    eFieldState ready;
    eFieldState armedAway;
    eFieldState armedStay;
    eFieldState backLight;
    eFieldState programmingMode;
    uint8_t         beep;
    const uint8_t   beepMaximum;
    const uint8_t   beepMinimum;
    eFieldState zonesBypassed;
    eFieldState acPower;
    eFieldState chimeMode;
    eFieldState alarmTriggered;
    eFieldState alarmBell;
    eFieldState batteryLow;
    eFieldState unused;
    bool        valid;
    void setFieldState(eFieldState &fieldState, const unsigned char fieldStateSymbol);


};

#endif /* ALARMSTATUS_H_ */
